package com.deng.api.controller;

import com.deng.api.entity.CloudCompany;
import com.deng.api.entity.SysRole;
import com.deng.api.log.Log;
import com.deng.api.service.ISysRoleService;
import com.deng.api.vo.MenuParamsVO;
import com.deng.commons.common.BaseResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;

import java.util.Set;

/**
 * <p>
 * 角色表 前端控制器
 * </p>
 *
 * @author deng
 * @since 2022-08-10
 */
@RestController
@Api(tags="角色相关接口")
@RequestMapping("/api/roles")
public class SysRoleController {
    @Autowired
    private ISysRoleService iSysRoleService;

    @GetMapping("/all")
    @Log("获取所有的角色信息")
    @ApiOperation("获取所有的角色信息")
    public BaseResult getAll(){
        return iSysRoleService.getRoles();
    }

    @GetMapping
    @Log("获取所有的角色信息,分页")
    @ApiOperation("获取所有的角色信息,分页")
    public BaseResult getRolesPage(@RequestParam(defaultValue = "1") Integer page,
                                   @RequestParam(defaultValue = "5") Integer size, SysRole sysRole){
        return iSysRoleService.getPages(page,size,sysRole);
    }

    @ApiOperation("添加角色")
    @PostMapping("/add")
    public BaseResult addRole(@RequestBody SysRole sysRole){
        return iSysRoleService.addRole(sysRole);
    }

    @ApiOperation("更新角色")
    @PostMapping("/update")
    public BaseResult updateRole(@RequestBody SysRole sysRole){
        return BaseResult.result(iSysRoleService.updateById(sysRole));
    }

    /**
     * 步骤：
     *      （1） 查看是否有用户拥有该角色，如果有就不能删除
     *      （2） 角色跟menu也有关联，需要先删除角色菜单关联才行
     *      （3） 最后才是删除角色数据
     */
    @ApiOperation("删除角色")
    @PostMapping("/delete")
    public BaseResult delRole(@RequestBody Set<Long> rids){
        return iSysRoleService.delRole(rids);
    }

    /**
     * 步骤：
     *      （1）需要获取当前角色的所有权限菜单
     *      （2）如果已经存在的权限菜单就不操作，如果不存在的就添加到sys_roles_menus表中
     */
    @ApiOperation("分配权限")
    @PostMapping("/menu")
    public BaseResult menu(@RequestBody MenuParamsVO menuParamsVO){
        return iSysRoleService.menu(menuParamsVO);
    }

}
